/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Vista;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.beans.InvalidationListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
import javafx.util.Duration;
import transervfx.Dato.Entidad.Repartidor;
import transervfx.Dato.Entidad.TipoServicio;
import transervfx.Dato.Entidad.ZonaRegional;
import transervfx.Logica.GestorRepartidor;
import transervfx.Logica.GestorTipoServicio;
import transervfx.Logica.GestorZona;
import transervfx.Vista.XML.pathRecusosFXML;
import utilidades.number.IntegerTextField;

/**
 * FXML Controller class
 *
 * @author meli
 */
public class ABMTipoServicio extends VentanaModal{

    

    private Timeline locationUpdateTimeline;
    final static private int tiempoDeRespuesta=1000;
    
    
    @FXML
    private ImageView iconoBuscando;
    
    @FXML
    private ComboBox<String> tipoServicio;
    @FXML
    private TextField nombre;
    @FXML
    private TextField prioridad;
    
    
    @FXML
    private TableView<TipoServicio> tableTiposServicio;
    
    @FXML
    private TableColumn tableColumTipo;
    @FXML
    private TableColumn tableColumNombre;
    @FXML
    private TableColumn tableColumDescripcion;
    @FXML
    private TableColumn tableColumPrioridad;
    @FXML
    private TableColumn tableColumPrecio;
    
    @FXML
    private Button buttonModificar;
    @FXML
    private Button buttonEliminar;
    @FXML
    private Button buttonVer;
    
     private TipoServicio tipoServicioView;
    
    final ObservableList<TipoServicio> dataSourceTiposServicio = FXCollections.observableArrayList();
    
    
    
    public ABMTipoServicio(Stage ventanaPadre,String titulo,int x, int y) {
        super( ventanaPadre, titulo, x,  y);
        initialize(null,null);
    }
    
    public void initialize(URL url, ResourceBundle rb) {
        
        
        this.tableTiposServicio.setItems(this.dataSourceTiposServicio);
        
       
        buscarTipoServicioPorFiltro();
 
       
        //Introduce un escuchador para cada campo del filtro.
        this.crearEscuchadores();
        
        //Hace un binding entre La columna y las propiedades del repartidor
        this.bindingTableColum();
    }    
    
    
    private void crearEscuchadores() {
    
        this.tipoServicio.valueProperty().addListener(this.escuchadorInputTextField);
        this.nombre.textProperty().addListener(this.escuchadorInputTextField);
        this.prioridad.textProperty().addListener(this.escuchadorInputTextField);
        
    
    }
    
    private void bindingTableColum(){
    
        this.tableColumTipo.setCellValueFactory(new PropertyValueFactory<TipoServicio, String>("tipoDoc"));
        this.tableColumNombre.setCellValueFactory(new PropertyValueFactory<TipoServicio, String>("nombre"));
        this.tableColumDescripcion.setCellValueFactory(new PropertyValueFactory<TipoServicio, String>("descripcion"));
        this.tableColumPrioridad.setCellValueFactory(new PropertyValueFactory<TipoServicio, String>("prioridad"));
        this.tableColumPrecio.setCellValueFactory(new PropertyValueFactory<TipoServicio, String>("precio"));
    
    }
    
    public void buttonNuevo(ActionEvent event) throws IOException {
        new CrearTipoServicio(this,"Crear tipo de servicio",348,429);
    }
    
    public void buttonModificar(ActionEvent event) throws IOException {
      
    }
    
    public void buttonEliminar(ActionEvent event) throws IOException {
      
    }
    
    public void buttonVer(ActionEvent event) throws IOException {
     
    }
    
   
    public void buttonCancelar(ActionEvent event) {
        this.close();
    }

        
    
    
    private void buscarTipoServicioPorFiltro() {
    
        String tipoServ = (this.tipoServicio.getSelectionModel().getSelectedItem() == null) ? "" : this.tipoServicio.getSelectionModel().getSelectedItem();
        
        //List<TipoServicio> tiposServiciosFiltrados = GestorTipoServicio.getInstance().finByTipoNombrePrioridad(tipoServ,this.nombre.getText(), this.prioridad.getText());
        
    }
    
   
    
    ChangeListener escuchadorInputTextField = new ChangeListener<Object>() {
        public void changed(ObservableValue observableValue,Object s, Object s1) {

             if (!s1.toString().isEmpty() || !s.toString().equals(s1)) {
                // delay location updates to we don't go too fast file typing

                iconoBuscando.setVisible(true);

                if (locationUpdateTimeline != null) {

                    locationUpdateTimeline.stop();
                }

                locationUpdateTimeline = new Timeline();
                locationUpdateTimeline.getKeyFrames().add(
                        new KeyFrame(new Duration(tiempoDeRespuesta),
                        new EventHandler<ActionEvent>() {
                            public void handle(ActionEvent actionEvent) {
                                
                                System.out.println("locationUpdateTimeline " + locationUpdateTimeline.getDelay());

                                 buscarTipoServicioPorFiltro();
                                 iconoBuscando.setVisible(false);
                                 
                                 
                                 //Si la tabla de los repartidores esta vacia, los botones Modificar, Eliminar y Ver
                                 //se muestran grisados.
                                 if(tableTiposServicio.getItems().isEmpty()){
                                   
                                     buttonModificar.setDisable(true);
                                     buttonEliminar.setDisable(true);
                                     buttonVer.setDisable(true);
                                }
                                else{
                                     buttonModificar.setDisable(false);
                                     buttonEliminar.setDisable(false);
                                     buttonVer.setDisable(false);
                                 }
                            }
                        }));
                locationUpdateTimeline.play();

            }
        }
    };
    
       @Override
    URL getURLFXML() {
          return pathRecusosFXML.class.getResource("ABMTipoServicioFXML.fxml");
    }
    
   
}
